#include<arbb.hpp>
using namespace arbb;
// Graph abstract class
class Graph {
public:
  // Return the number of vertices
  virtual i32 n() =0;
  // Return the current number of edges
  virtual i32 e() =0;
  // Return the index of the first neigbor of given vertex
  virtual i32 first(i32) =0;
  // Return the index of the next neigbor of given vertex
  virtual i32 next(i32, i32) =0;
  // Store an edge defined by two vertices and weight
  virtual void setEdge(i32, i32, i32) =0;
  // Delete edge defined by two vertices
  virtual void delEdge(i32, i32) =0;
  // Return weight of edge connecting two vertices
  // Return 0 if no such edge exists
  virtual i32 weight(i32, i32) =0;
  // Get mark value for a vertex
  virtual i32 getMark(i32) =0;
  //  Set mark value for a vertex
  virtual void setMark(i32, i32) =0;
};
